package zhtt;

/**
 * Created by zhtt on 2017/4/14.
 */

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import java.io.Serializable;

/**
 * Created by zhtt on 2017/4/14.
 */
public class HbnUtil {
    private static SessionFactory sessionFactory;

    public static Session getSession(){
        if(sessionFactory==null||sessionFactory.isClosed()){
            sessionFactory=new Configuration().configure().buildSessionFactory();
        }
        return sessionFactory.getCurrentSession();
    }

    /**
     * 从二级缓存中删除参数指定类型的所有对象。
     * 如参数为 Account.class， 则会删除二级缓存中所有 Account 类型的对象。
     * @param t
     * @param <T>
     */
    public static<T> void evictEntityRegion(Class<T> t){
        sessionFactory.getCache().evictEntityRegion(t);
    }

    /**
     * 根据id从二级缓存中清除
     * @param t
     * @param id
     * @param <T>
     */
    public static<T> void evict(Class<T> t, Serializable id){
        sessionFactory.getCache().evictEntity(t,id);
    }

    /**
     * 清除指定集合的缓存
     * @param role“com.bjpowernode.Country.ministerSet”
     * @param <T>
     */
    public static<T> void evict(String role){
        sessionFactory.getCache().evictCollectionRegion(role);
    }
}
